/**
|--------------------------------------------------------------
| AdmServicio.java
|--------------------------------------------------------------
| @Autor: David Ccapa Gil
| @Fecha de creacion: 01/10/2012
| @Fecha de la ultima modificacion: 01/10/2012
| @Universidad Peruana de Ciencias Aplicadas
|--------------------------------------------------------------
*/
package appbenedictoxvi;

import java.util.ArrayList;

/**
 *
 * @author David
 */
public class AdmServicio {
    private ArrayList<Servicio> servicios;
    Validaciones objVal = new Validaciones();
    
    public AdmServicio() {
        servicios = new ArrayList<Servicio>();
    }

    public ArrayList<Servicio> getServicio(){
        return servicios;
    }
    
    public void registarServicio(String idservicio, String descripcion, double precio) throws BusinessException{

        //Validacion de datos
        validarDatos(idservicio, descripcion, precio);
        
        //Insertamos en la clase
        Servicio servicio = new Servicio(idservicio, descripcion, precio);
        
        //Insertamos en la coleccion
        servicios.add(servicio);
    }

    public Servicio buscarServicio(String idservicio) {
        for (Servicio servicio : servicios) {
            if (servicio.getIdservicio().equals(idservicio)) {
                return servicio;
            }

        }
        return null;
    }

    private void validarDatos(String idservicio, String descripcion, double precio) throws BusinessException{
        validarDatosMandatorios(idservicio, descripcion, precio);
        validarDuplicidad(idservicio);
    }

    private void validarDatosMandatorios(String idservicio, String descripcion, double precio) throws BusinessException{
        String mensaje = "";
        
        if (!objVal.isSet(idservicio)) {
            mensaje += "Codigo no puede ser vacio o nulo";
        }
        if (!objVal.isSet(descripcion)) {
            mensaje += "Descripcion no puede ser vacio o nulo";
        }
        if (precio <= 0) {
            mensaje += "Precio no puede ser negativo o cero";
        }
        
        if (objVal.isSet(mensaje)) {
            throw new BusinessException(mensaje);
        }
    }

    private void validarDuplicidad(String idservicio) throws BusinessException{
        if (buscarServicio(idservicio) != null) {
            String mensaje = "Error: " + idservicio + " ya existe";
            //Crea la excepcion y lanzarlo
            throw new BusinessException(mensaje);
        }
    }

    public void eliminarServicio(String idservicio) throws BusinessException{
        Servicio servicio = buscarServicio(idservicio);
        if (servicio != null) {
            servicios.remove(servicio);
        } else {
            validarEliminacionDeUnServicioInexistente(idservicio);
        }
    }

    private void validarEliminacionDeUnServicioInexistente(String idservicio) throws BusinessException{
        Servicio servicio = buscarServicio(idservicio);
        if (servicio == null) {
            String mensaje = "Servicio a Eliminar con codigo: " + idservicio + " no existe.";
            throw new BusinessException(mensaje);
        }
    }

    public void modificarServicio(String idservicio, String descripcion, double precio) {
        Servicio servicio = buscarServicio(idservicio);
        if (servicio != null) {
            servicio.setDescripcion(descripcion);
            servicio.setPrecio(precio);
        }
    }
}